package org.huawei260.TiKu.D;//package org.huawei260.TiKu.D;

import java.util.Scanner;

/**
 * @Auther: qingle
 * @Date: 2024/10/28-12:53
 * @Description:
 *
 * 一个整数可以由连续的自然数之和来表示。
 *
 * 给定一个整数，计算该整数有几种连续自然数之和的表达式， 并打印出每一种表达式。
 *
 * 输入格式
 * 一个目标整数 t，1 <= t <= 1000
 * 输出格式
 * 1. 该整数的所有表达式和表达式的个数，如果有多种表达式，自然数个数最少的表达式优先输出
 *
 * 2. 每个表达式中按自然数递增输出
 *
 * 3. 具体的格式参见样例
 *
 * 4. 在每个测试数据结束时，输出一行 Result:X
 *
 * 5. 其中 X 是最终的表达式个数
 *
 * 输入样例    复制
 * 9
 * 输出样例    复制
 * 9=9
 * 9=4+5
 * 9=2+3+4
 * Result:3
 *
 * @version: 1.0
 */
public class D_2522_整数分解2 {

//	public class ConsecutiveSum {

		public static void main(String[] args) {
			Scanner sc = new Scanner(System.in);
			int target = sc.nextInt();

			// 将target分解为k个连续自然数的和的表达式，k从1到target/2
			String result = "";
			for (int i = 1; i < target/2; i++) {
				result += split(target, i)=="-1" ? "" : split(target, i) + "\n";
			}

			System.out.println(result+ "Result:" + result.split("\n").length);
		}

		public static String split(int target, int k) {
			// 检查k是否在有效范围内
			if (k <= 0 || k > target / 2) {
//				System.out.println("无法将 " + target + " 分割成 " + k + " 个连续自然数的和");
				return "-1";
			}

			// 计算平均数
			int average = target / k;
			// 计算最小的数 m
			int m = average - (k - 1) / 2;

			// 检查m是否为自然数
			if (m <= 0) {
//				System.out.println("无法将 " + target + " 分割成 " + k + " 个连续自然数的和");
				return "-1";
			}

			// 检查连续自然数的和是否等于target
			int sum = 0;
			for (int i = 0; i < k; i++) {
				sum += m + i;
			}

			if (sum != target) {
//				System.out.println("无法将 " + target + " 分割成 " + k + " 个连续自然数的和");
				return "-1";
			}

			// 打印连续自然数
			String result = target + "=" + m + "+";
			for (int i = 1; i < k; i++) {
				result += (m + i) + "+";
			}
			return result.substring(0, result.length() - 1);
		}


}
